package com.demo.change;

import org.aspectj.apache.bcel.classfile.ClassParser;
import org.aspectj.apache.bcel.classfile.JavaClass;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ClassChange {
    //java程序使用jd-core库批量实现class文件转为java文件

    /*要使用JD-Core库批量将Class文件转换为Java文件，您可以使用以下步骤：

添加JD-Core库到您的Java项目中。您可以从JD-Core的官方网站下载它，或者使用Maven或Gradle等构建工具将其添加到您的项目中。

创建一个Java类，该类包含一个main方法，该方法将批量执行Class文件到Java文件的转换。

在main方法中，使用JD-Core库的API创建一个反编译器实例。您可以使用JD-Core类的of方法来创建一个反编译器实例。例如：*/

    public static void main(String[] args) throws IOException {
//        JD-Core core = JD-Core.of();
//        //使用core实例的read方法读取要转换的Class文件。例如：
//        CodeReader codeReader = core.parse(classNode);
//        //使用codeReader实例的as方法将Java源代码转换为字符串。例如：
//        String javaCode = codeReader.as();
//        //将Java代码保存到文件中。您可以使用Java的文件IO API将Java代码保存到指定的文件中。例如：
//        try (FileWriter writer = new FileWriter("path/to/output/file.java")) {
//            writer.write(javaCode);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }


        // 解析类文件并获取JavaClass对象

        File file = new File("C:\\Users\\Administrator\\Desktop\\excelTest\\BOOT-INF\\classes\\com\\grgbanking\\manage\\module\\process_statistic\\service\\impl\\RequireInfoServiceImpl.class");
        FileInputStream fis = new FileInputStream(file);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] b = new byte[1024];
        int n;
        while ((n = fis.read(b)) != -1) {
            bos.write(b, 0, n);
        }
        fis.close();
        //byte[] data = bos.toByteArray();
        bos.close();

        String fileName = "RequireInfoServiceImpl.class";
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bos.toByteArray());
        ClassParser parser = new ClassParser(byteArrayInputStream, fileName);
        JavaClass javaClass = parser.parse();
        System.out.println("反编译后的输出");
        System.out.println(javaClass);
    }
}
